package fr.afcepf.atod18.restaurants.web;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import fr.afcepf.atod18.commande.entity.Panier;
import fr.afcepf.atod18.commande.entity.ProduitSelectionne;
import fr.afcepf.atod18.commande.web.PanierMB;
import fr.afcepf.atod18.restaurants.entity.Produit;
import fr.afcepf.atod18.restaurants.entity.ProduitsPourPanier;
import fr.afcepf.atod18.utilitaires.entity.InfoSession;
import fr.afcepf.atod18.utilitaires.service.IServiceFacade;

@ManagedBean(name = "listeProduitsMB")
@SessionScoped
public class ListeProduitsMB {
    @ManagedProperty(value = "#{serviceFacade}")
    IServiceFacade serviceFacade;
    @ManagedProperty(value = "#{panierMB}")
    private PanierMB panierMB;
    
    private InfoSession infoSession;
    private List<Produit> listeProduits;
    private List<ProduitsPourPanier> listeProduitsPanier;
    private ProduitsPourPanier prodEnModif;

    private Integer idPrec = 1000000;

    // begin: Add code related to ws
    private Integer quantite = 0;
    private Integer total = 0;
    // end: Add code related to ws


    public ListeProduitsMB() {
        super();
        System.out
                .println("===================================================================================================");
        System.out.println("mb liste produit instancie" + this);
        System.out
                .println("===================================================================================================");
    }

    public String doSelection() {
    	panierMB.setInfoSession(infoSession);
    	System.out.println("infoSession liste produits " + infoSession.getLogin() + " de " + infoSession.getPrenom() + " " +infoSession);
        return "Panier";
    }

    public String doSuite() {
        return "welcome";
    }

    public String getSelectedItems() {
        Set<ProduitSelectionne> listePrdSel = new HashSet<ProduitSelectionne>();
        double total = 0;
        for (ProduitsPourPanier p : listeProduitsPanier) {
            System.out.println("Produit : " + p.getProd().getNom() + " " + p.getProd().getPrix()
                    + " " + p.getQteAAjouter());
            if (p.getQteAAjouter() > 0) {
                System.out.println("Produit selectionne : " + p.getProd().getNom() + " "
                        + p.getProd().getPrix());
                ProduitSelectionne prdSel = new ProduitSelectionne(p.getQteAAjouter(), p.getProd());
                listePrdSel.add(prdSel);
                total += prdSel.getQuantite() * prdSel.getProduit().getPrix();
            }
        }
        Panier panier = new Panier(total, listePrdSel);
        infoSession.setPanier(panier);
        //panierMB.setInfoSession(infoSession);
        panierMB.chargeListeProduits();
        infoSession.setPageCourante("Panier");
        if (infoSession.isEstConnecte() == false){
        return "Panier";
        }
        else {
            return "PanierClient";
       	
        }
    }

    public List<ProduitsPourPanier> getListeProduitsPanier() {

        if (infoSession.getIdSelRestaurant() != idPrec) {
        	listeProduits = serviceFacade.getServiceRestaurant()
                    .rechercherProduitsRestaurant(infoSession.getIdSelRestaurant());
        	listeProduitsPanier = new ArrayList<ProduitsPourPanier>();
            idPrec = infoSession.getIdSelRestaurant();
            
            // fabrique listeProduitPourPanier à partir de listeProduits
            for (Produit p:listeProduits){
            	ProduitsPourPanier ppp = new ProduitsPourPanier();
            	ppp.setProd(p);
            	ppp.setQteAAjouter(0);
            	listeProduitsPanier.add(ppp);
            }
        }

        if (listeProduitsPanier != null) {
            Collections.sort(listeProduitsPanier);
        }
		return listeProduitsPanier;
	}

	public void setListeProduitsPanier(List<ProduitsPourPanier> listeProduitsPanier) {
		this.listeProduitsPanier = listeProduitsPanier;
	}

	public ProduitsPourPanier getProdEnModif() {
		return prodEnModif;
	}
	public void setProdEnModif(ProduitsPourPanier prodEnModif) {
		this.prodEnModif = prodEnModif;
	}
    /**
     * @return the idPrec
     */
    public Integer getIdPrec() {
        return idPrec;
    }

    /**
     * @param paramIdPrec
     *            the idPrec to set
     */
    public void setIdPrec(Integer paramIdPrec) {
        idPrec = paramIdPrec;
    }
    /**
     * @return the panierMB
     */
    public PanierMB getPanierMB() {
        return panierMB;
    }

    /**
     * @param paramPanierMB
     *            the panierMB to set
     */
    public void setPanierMB(PanierMB paramPanierMB) {
        panierMB = paramPanierMB;
    }

    // begin: Add code related to ws

    /**
     * @return the quantite
     */
    public Integer getQuantite() {
        return quantite;
    }

    /**
     * @param paramQuantite
     *            the quantite to set
     */
    public void setQuantite(Integer paramQuantite) {
        System.out.println("setQuantite : " + quantite + " ");
        quantite = paramQuantite;
    }

    /**
     * @return the total
     */
    public Integer getTotal() {
        return total;
    }

    /**
     * @param paramTotal
     *            the total to set
     */
    public void setTotal(Integer paramTotal) {
        total = paramTotal;
    }
   
    public String majQuantite() {

        for (Produit p : listeProduits) {
            p.setQuantite(quantite);
        }

        for (Produit p : listeProduits) {
            System.out.println("Produit : " + p.getNom() + " quantite = "
                    + p.getQuantite());
        }

        return null;
    }

    // end: Add code related to ws
    public void majPrixAPayer (){
    	for (ProduitsPourPanier p:listeProduitsPanier){
    		p.setPrixAPayer(p.getQteAAjouter()*p.getProd().getPrix());
    	}
    }

    /**
     * @return the infoSession
     */
    public InfoSession getInfoSession() {
        return infoSession;
    }

    /**
     * @param paramInfoSession the infoSession to set
     */
    public void setInfoSession(InfoSession paramInfoSession) {
        infoSession = paramInfoSession;
    }

    /**
     * @return the serviceFacade
     */
    public IServiceFacade getServiceFacade() {
        return serviceFacade;
    }

    /**
     * @param paramServiceFacade the serviceFacade to set
     */
    public void setServiceFacade(IServiceFacade paramServiceFacade) {
        serviceFacade = paramServiceFacade;
    }
}
